package Linkedlists;

public class LinkedList {
    ListNode head;  // 定义链表头节点

    // 构造函数，初始化链表
    public LinkedList() {
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);

        node1.next = node2;
        node2.next = node3;

        head = node1;  // 设置头节点
    }

    // 删除指定值的节点
    public void remove(int key) {
        if (head == null) {
            return;
        }

        // 如果头节点就是要删除的节点
        if (head.val == key) {
            head = head.next;
            return;
        }

        // 查找要删除节点的前一个节点
        ListNode cur = findNodeOfKey(key);
        if (cur == null) {
            return;  // 没找到，直接返回
        }

        // 删除节点
        ListNode del = cur.next;
        cur.next = del.next;
    }

    // 辅助方法：查找包含指定值的前一个节点
    private ListNode findNodeOfKey(int key) {
        ListNode prev = null;
        ListNode cur = head;

        while (cur != null) {
            if (cur.val == key) {
                return prev;  // 找到目标节点，返回前一个节点
            }
            prev = cur;
            cur = cur.next;
        }

        return null;  // 没找到，返回 null
    }

    // 打印链表（用于测试）
    public void printList() {
        ListNode cur = head;
        while (cur != null) {
            System.out.print(cur.val + " -> ");
            cur = cur.next;
        }
        System.out.println("null");
    }

    // 测试
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        System.out.println("原始链表:");
        list.printList();

        list.remove(2);  // 删除值为 2 的节点
        System.out.println("删除 2 后的链表:");
        list.printList();
    }
}

// 链表节点类
class ListNode {
    int val;
    ListNode next;

    public ListNode(int val) {
        this.val = val;
        this.next = null;
    }
}